Skip Headers

Oracle® Database PL/SQL Packages and Types Reference 10g Release 2 (10.2) Part Number B14258-01 |
Home | Book List | Contents | Index | Master Index | Feedback

Previous | Next

# 28 DBMS_DB_VERSION

The `DBMS_DB_VERSION` package specifies the Oracle version numbers and other information useful for simple conditional compilation selections based on Oracle versions.

See Also: PL/SQL Users Guide and Reference regarding conditional compilation

This package contains the following topics

- Using DBMS_DB_VERSION

  - Overview

  - Constants

  - Examples

## Using DBMS_DB_VERSION

- Overview

- Constants

### Overview

The `DBMS_DB_VERSION` package specifies the Oracle version numbers and other information useful for simple conditional compilation selections based on Oracle versions.

The package for the Oracle Database 10g Release 2 version is shown below.

    PACKAGE DBMS_DB_VERSION IS
       VERSION CONSTANT PLS_INTEGER := 10; -- RDBMS version number
       RELEASE CONSTANT PLS_INTEGER := 2;  -- RDBMS release number
       ver_le_9_1    CONSTANT BOOLEAN := FALSE;
       ver_le_9_2    CONSTANT BOOLEAN := FALSE;
       ver_le_9      CONSTANT BOOLEAN := FALSE;
       ver_le_10_1   CONSTANT BOOLEAN := FALSE;
       ver_le_10_2   CONSTANT BOOLEAN := TRUE;
       ver_le_10     CONSTANT BOOLEAN := TRUE;
    END DBMS_DB_VERSION;

The boolean constants follow a naming convention. Each constant gives a name for a boolean expression. For example:

- `VER_LE_9_1` represents version <= 9 and release <= 1

- `VER_LE_10_2` represents version <= 10 and release <= 2

- `VER_LE_10` represents version <= 10

A typical usage of these boolean constants is:

    $IF DBMS_DB_VERSION.VER_LE_10 $THEN
       version 10 and earlier code
    $ELSIF DBMS_DB_VERSION.VER_LE_11 $THEN
       version 11 code
    $ELSE
       version 12 and later code
    $END

This code structure will protect any reference to the code for hypothetical version 12. It also prevents the controlling package constant `DBMS_DB_VERSION`.`VER_LE_11` from being referenced when the program is compiled under version 10. A similar observation applies to version 11. This scheme works even though the static constant `VER_LE_11` is not defined in version 10 database because conditional compilation protects the `$ELSIF` from evaluation if `DBMS_DB_VERSION`.`VER_LE_10` is `TRUE`.

### Constants

The `DBMS_DB_VERSION` package contains different constants for different Oracle Database releases. The Oracle Database 10g Release 2 version of the `DBMS_DB_VERSION` package uses the constants shown in Table 28-1.

Table 28-1 DBMS_DB_VERSION Constants

Name | Type | Value | Description
--- | --- | --- | ---
`VERSION` | `PLS_INTEGER` | 10 | Current version
`RELEASE` | `PLS_INTEGER` | 2 | Current release
`VER_LE_9` | `BOOLEAN` | `FALSE` | Version <= 9
`VER_LE_9_1` | `BOOLEAN` | `FALSE` | Version <= 9 and release <= 1
`VER_LE_9_2` | `BOOLEAN` | `FALSE` | Version <= 9 and release <= 2
`VER_LE_10` | `BOOLEAN` | `TRUE` | Version <= 10
`VER_LE_10_1` | `BOOLEAN` | `FALSE` | Version <= 10 and release <= 1
`VER_LE_10_2` | `BOOLEAN` | `TRUE` | Version <=10 and release <= 2

### Examples

This example uses conditional compilation to guard new features.

    CREATE OR REPLACE PROCEDURE whetstone IS

     -- Notice that conditional compilation constructs
     -- can interrupt a regular PL/SQL statement.
     -- You can locate a conditional compilation directive anywhere
     -- there is whitespace in the regular statement.

     SUBTYPE my_real IS
        $IF DBMS_DB_VERSION.VER_LE_9 $THEN NUMBER
                                     $ELSE BINARY_DOUBLE
        $END;

     t  CONSTANT my_real := $IF DBMS_DB_VERSION.VER_LE_9 $THEN 0.499975
                                                         $ELSE 0.499975d
                            $END;

     t2 CONSTANT my_real := $if DBMS_DB_VERSION.VER_LE_9 $THEN 2.0
                                                         $ELSE 2.0d
                            $END;

     x  CONSTANT my_real := $IF DBMS_DB_VERSION.VER_LE_9 $THEN 1.0
                                                         $ELSE 1.0d
                            $END;

     y  CONSTANT my_real := $IF DBMS_DB_VERSION.VER_LE_9 $THEN 1.0
                                                         $ELSE 1.0d
                            $END;

     z  MY_REAL;

     PROCEDURE P(x IN my_real, y IN my_real, z OUT NOCOPY my_real) IS
       x1 my_real;
       y1 my_real;
     BEGIN
       x1 := x;
       y1 := y;
       x1 := t * (x1 + y1);
       y1 := t * (x1 + y1);
       z := (x1 + y1)/t2;
     END P;
    BEGIN
     P(x, y, z);
     DBMS_OUTPUT.PUT_LINE ('z = '|| z);
    END whetstone;
    /